package com.nebula.salary.portal.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nebula.salary.common.result.ServerResponse;
import com.nebula.salary.model.dto.PageDto;
import com.nebula.salary.model.pojo.Salary;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nebula.salary.model.vo.PageResult;
import com.nebula.salary.model.vo.SalaryVo;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 工资表 服务类
 * </p>
 *
 * @author codex
 * @since 2022-01-24
 */
public interface ISalaryService extends IService<Salary> {
    
    /**
     * 根据年份查询工资
     *
     * @param year    年份
     * @param pageDto 分页查询数据传输类
     * @return 工资列表
     */
    ServerResponse<PageResult> selectSalaryByYear(Integer year, PageDto pageDto);
    
    /**
     * I  * 分页查询所有工资
     *
     * @param pageDto 分页查询数据传输类
     * @return 工资列表
     */
    ServerResponse<PageResult> selectAllByPage(PageDto pageDto);
    
    /**
     * 工资统计
     *
     * @param pageDto 分页查询数据传输类
     * @return 统计结果
     */
    ServerResponse<PageResult> analyze(PageDto pageDto);
    
    /**
     * 工资总计
     *
     * @return 工资总计
     */
    BigDecimal getSum();
    
    /**
     * 查询全部、一年、两年或更多的数据
     *
     * @param yearCount 查询几年，0代表1年 1代表2年 以此类推
     * @return 工资列表
     */
    List<Salary> getSalaryByYearCount(Integer yearCount);
    
    /**
     * 根据用户ID获取年度工资合计
     *
     * @param userId 用户ID
     * @return 年度工资合计
     */
    List<Map<String, BigDecimal>> getSumSalaryGroupByYear(Long userId);
}
